x11: Make unsetting transient-for work
authorBenjamin Otte <otte@redhat.com>
Thu, 14 Dec 2017 01:59:58 +0000 (02:59 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 14 Dec 2017 02:05:34 +0000 (03:05 +0100)
... and just unset it from GtkWindow instead of fiddling with
properties.

gdk/x11/gdkwindow-x11.c
gtk/gtkwindow.c

index a30861827ef3d41bc369deff2cb787f3cd9c7448..d56c9bdf0e0e0dea12ce789f754610aa051be73a 100644 (file)
@@ -2448,11 +2448,19 @@ static void
 gdk_x11_window_set_transient_for (GdkWindow *window,
                                  GdkWindow *parent)
 {
-  if (!GDK_WINDOW_DESTROYED (window) && !GDK_WINDOW_DESTROYED (parent) &&
-      WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
+  if (GDK_WINDOW_DESTROYED (window) ||
+      !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
+    return;
+
+  /* XSetTransientForHint() doesn't allow unsetting, so do it manually */
+  if (!GDK_WINDOW_DESTROYED (parent))
     XSetTransientForHint (GDK_WINDOW_XDISPLAY (window), 
                          GDK_WINDOW_XID (window),
                          GDK_WINDOW_XID (parent));
+  else
+    XDeleteProperty (GDK_WINDOW_XDISPLAY (window),
+                     GDK_WINDOW_XID (window),
+                     gdk_x11_get_xatom_by_name_for_display (GDK_WINDOW_DISPLAY (window), "WM_TRANSIENT_FOR"));
 }
 
 GdkCursor *
index 94c1ba4ad8cf8f074a086e4625598eb44fad3fb0..a429ba311f360c12b26c1dc85a4b0aa871d484c9 100644 (file)
@@ -3382,8 +3382,7 @@ gtk_window_transient_parent_unrealized (GtkWidget *parent,
                                        GtkWidget *window)
 {
   if (_gtk_widget_get_realized (window))
-    gdk_property_delete (_gtk_widget_get_window (window),
-                        gdk_atom_intern_static_string ("WM_TRANSIENT_FOR"));
+    gdk_window_set_transient_for (_gtk_widget_get_window (window), NULL);
 }
 
 static void